# 本文将基于爬取B站视频热搜榜单数据并存储为例，详细介绍Python爬虫的基本流程。

# 至此我们就成功使用Python将b站热门视频榜单数据存储至本地，大多数基于requests的爬虫基本都按照上面四步进行。
# 不过虽然看上去简单，但是在真实场景中每一步都没有那么轻松，从请求数据开始目标网站就有多种形式的反爬、
# 加密，到后面解析、提取甚至存储数据都有很多需要进一步探索、学习。
import pandas
import requests
from bs4 import BeautifulSoup
import pandas as pd

# 第一步：尝试请求
url = 'https://www.bilibili.com/v/popular/rank/all'
res = requests.get(url)
#  第二步：解析页面 bs4解析
soup = BeautifulSoup(res.content, 'html.parser')
title = soup.title.text
print(title)
# 第三步：提取内容
all_products = []
products = soup.select('li.rank-item')
for product in products:
    # "视频排名": rank,    "视频名": name,    "播放量": play,    "弹幕量": comment,    "up主": up,    "视频链接": url
    rank = product.select('div.num')[0].text
    name = product.select('div.info > a')[0].text.strip()
    play = product.select('span.data-box')[0].text.strip()
    comment = product.select('span.data-box')[1].text.strip()
    up = product.select('span.data-box')[2].text.strip()
    url = product.select('div.info > a')[0].attrs['href']

    all_products.append({
        "视频排名": rank,
        "视频名": name,
        "播放量": play,
        "弹幕量": comment,
        "up主": up,
        "视频链接": url
    })
#  第四步：存储数据
keys = all_products[0].keys()
pd.DataFrame(all_products, columns=keys).to_csv('B站视频热榜TOP100.csv', encoding='utf-8-sig')
